Actualmente estoy usando Sequelize 6.5.1 en una API nodeJS/Express y me gustaría configurar algunas asociaciones entre modelos, sabiendo que actualmente no estoy usando la función de migración de secuencias.
Tengo 3 modelos: Rol, Permission_group, Permission .
Esto es lo que he hecho para la primera asociación:
Role.hasMany(this.sequelize.models.permission_groups, { foreignKey: "role_id", onDelete: "CASCADE", }); PermissionGroup.belongsTo(this.sequelize.models.roles, { foreignKey: "role_id", });Y lo que puedo ver en la base de datos de postgres:
Foreign-key constraints: "permission_groups_role_id_fkey" FOREIGN KEY (role_id) REFERENCES roles(_id) ON UPDATE CASCADE ON DELETE CASCADEY esto es lo que he hecho para la segunda asociación:
PermissionGroup.hasMany(this.sequelize.models.permissions, { foreignKey: "permission_group_id", onDelete: "CASCADE", }); Permission.belongsTo(this.sequelize.models.permission_groups, { foreignKey: "permission_group_id", });Como puede ver, ambas asociaciones funcionan de la misma manera y se definen de la misma manera, pero esto es lo que obtengo para la segunda asociación:
Foreign-key constraints: "permissions_permission_group_id_fkey" FOREIGN KEY (permission_group_id) REFERENCES permission_groups(_id) ON UPDATE CASCADE ON DELETE SET NULLEntonces traté de definir la asociación de la manera inversa como esta:
PermissionGroup.hasMany(this.sequelize.models.permissions, { foreignKey: "permission_group_id", }); Permission.belongsTo(this.sequelize.models.permission_groups, { foreignKey: "permission_group_id", onDelete: "CASCADE", });Y aquí obtuve el comportamiento esperado:
Foreign-key constraints: "permissions_permission_group_id_fkey" FOREIGN KEY (permission_group_id) REFERENCES permission_groups(_id) ON UPDATE CASCADE ON DELETE CASCADETodo está funcionando de esta manera, pero no puedo entender por qué. Me gustaría comprender la verdadera estrategia onDelete e implementarla de la misma manera en todo mi código.
¿Está seguro de que no definió su modelo de permisos antes de su modelo de grupo de permisos ? creo que el problema viene de aqui..